package Passageiros;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import Vo.PassageirosDVO;
import Vo.PassageirosVO;

public class PassageirosDAO extends DataSourceDAO 
{
		public PassageirosDAO( ) 
		{
			
		}

	    public PassageirosVO consultarPassageiros( int codigo ) throws DAOException, SQLException  
	    {
	    	PassageirosVO passageiro = null;
	    
	        
	        String select = "select " + 
		                         "clientes.nome, " +
		                         "aeronave.tipo, " + 
		                         "voos.nacional, voos.internacional, " +
		                         "tipoclasses.descricao, " +
		                         "statusassentos.descricao, " +
		                         "assentos.descricao " +
	                        "from " +
	                             "clientes " +
	                             	"inner join passageiros on clientes.codigo = passageiros.codigocliente" +
	                             	"inner join passageiros on reservavoos.codigocliente = passageiros.codigocliente" +
	                             	"inner join reservavoos on voos.codigovoo = reservavoos.codigovoo" +
	                             	"inner join voos on voohastrechovoos.codigovoo = voos.codigo" +
	                             	"inner join voohastrechovoos on aeronaves.codigo = voohastrechovoos.codigoaeronave" +
	                             	"inner join passageiros on assentos.codigo = passageiros.codigoassentos" +
	                             	"inner join assentos on statusassentos.codigo = assentos.codigostatusassento" +
	                             	"inner join tipoclasse on assentos.codigotipoclasse = tipoclasse.codigo" +
	                        "where clientes.codigo = ?";
	        
	        
	        
	        PreparedStatement pstmt	= null;
	        pstmt.setInt( 1,codigo ) ;
	        ResultSet rs = null;
	        
	        try 
	        {
	        	connect( ) ;
	            pstmt = connection.prepareStatement( select );
	            pstmt.setInt( 1, codigo ) ;
	            rs = pstmt.executeQuery( ) ;
	            if ( rs.next() ) 
	            {
	            	String descricaoCliente = rs.getString("NOME");
	                String descricaoAeronave = rs.getString("TIPO");
	            	String descricaoTipoClasse = rs.getString("DESCRICAO");
	            	String statusAssento = rs.getString("DESCRICAO");
	            	String descricaoAssento = rs.getString("DESCRICAO");; 
	            	
	               PassageirosDVO con = new PassageirosDVO();
	               
	               con.setNomeCliente(descricaoCliente);
	               con.setTipoAeronave(descricaoAeronave);
	               con.setDescricaoTipoClasse(descricaoTipoClasse);
	               con.setDescricaoStatusAssento(statusAssento);
	               con.setDescricaoAssento(descricaoAssento);
	               	               
	                
	            }
	        } 
	        catch ( SQLException e ) 
	        {
	            e.printStackTrace();
	            throw new DAOException("Impossivel consultar passageiros!", e );
	        } 
	        finally 
	        {
	            try 
	            {
	                if ( pstmt != null ) 
	                {
	                    pstmt.close();
	                }
	                if ( rs != null ) 
	                {
	                    rs.close();
	                }
	                close( ) ;
	            } 
	            catch ( SQLException e ) 
	            {
	                e.printStackTrace( ) ;
	            }
	        }
	        return passageiro ;
	    }
	    
		public void inserirPassageiros( PassageirosVO passageiro ) throws DAOException  
	    {
	        String insert = "INSERT INTO PASSAGEIROS ( CODIGO, CODIGOCLIENTE, CODIGOAERONAVE, CODIGOVOO, CODIGOTIPOCLASSE, CODIGOSTATUSASSENTO, CODIGOASSENTO) VALUES (?,?,?,?,?,?,?)";
	        PreparedStatement pstmt = null;
	        
	        try 
	        {
	        	connect( ) ;
	            connection.setAutoCommit( false );
	            pstmt = connection.prepareStatement( insert );
	            pstmt.setInt(1, passageiro.getCodigoPassageiro());
	            pstmt.setInt( 2, passageiro.getCodigoCliente());
	            pstmt.setInt( 3, passageiro.getCodigoAeronave());
	            pstmt.setInt( 4, passageiro.getCodigoVoo());
	            pstmt.setInt( 5, passageiro.getCodigoTipoClasse());
	            pstmt.setInt( 6, passageiro.getCodigoStatusAssento());
	            pstmt.setInt( 7, passageiro.getCodigoAssento());
	            
	            
	            pstmt.executeUpdate( ) ;
	            commit( ) ;
	        } 
	        catch ( SQLException e ) 
	        {
	            rollback( ) ;
	            e.printStackTrace( ) ;
	            throw new DAOException ( "Impossivel inserir passageiro!" , e ) ;
	        } 
	        finally 
	        {
	            try 
	            {
	                if ( pstmt != null ) 
	                {
	                    pstmt.close();
	                }
	                close( ) ;
	            } 
	            catch ( SQLException e ) 
	            {
	                e.printStackTrace( );
	            }
	        }
	    }
	    
	    public void excluirPassageiros( PassageirosVO passageiro )  throws DAOException  
	    {
	        String delete = "DELETE FROM PASSAGEIROS WHERE CODIGO = ?";
	        PreparedStatement pstmt = null;
	        
	        try 
	        {
	        	connect( ) ;
	            connection.setAutoCommit( false );
	            pstmt = connection.prepareStatement( delete );
	            pstmt.setInt( 1,passageiro.getCodigoPassageiro( ) ) ;
	            pstmt.executeUpdate( ) ;
	            commit( ) ;
	        } 
	        catch ( SQLException e ) 
	        {
	            rollback( ) ;
	            e.printStackTrace( ) ;
	            throw new DAOException ( "Impossivel deletar passageiro!" , e ) ;
	        } 
	        finally 
	        {
	            try 
	            {
	                if ( pstmt != null ) 
	                {
	                    pstmt.close();
	                }
	                close( ) ;
	            } 
	            catch ( SQLException e ) 
	            {
	                e.printStackTrace( ) ;
	            }
	        }
	    }
	    
	    public void alterarPassageiros( PassageirosVO passageiro ) throws DAOException  
	    {
	        String insert = "UPDATE PASSAGEIROS SET  CODIGOCLIENTE = ?,CODIGOAERONAVE = ?, CODIGOVOO = ?,CODIGOTIPOCLASSE = ?,CODIGOASSENTO = ? WHERE CODIGO = ?";
	        PreparedStatement pstmt = null;
	        
	        try 
	        {
	        	connect( ) ;
	            connection.setAutoCommit( false );
	            pstmt = connection.prepareStatement( insert );
	            pstmt.setInt( 1, passageiro.getCodigoCliente());
	            pstmt.setInt( 2, passageiro.getCodigoAeronave());
	            pstmt.setInt( 3, passageiro.getCodigoVoo());
	            pstmt.setInt( 4, passageiro.getCodigoTipoClasse());
	            pstmt.setInt( 5, passageiro.getCodigoStatusAssento());
	            pstmt.setInt( 6, passageiro.getCodigoAssento());
	            pstmt.setInt( 7, passageiro.getCodigoPassageiro());
	            pstmt.executeUpdate ();
	            commit( ) ;
	        } 
	        catch ( SQLException e ) 
	        {
	            rollback( ) ;
	            e.printStackTrace( ) ;
	            throw new DAOException ( "Impossivel alterar passageiro!" , e ) ;
	        } 
	        finally 
	        {
	            try 
	            {
	                if ( pstmt != null ) 
	                {
	                    pstmt.close();
	                }
	                close( ) ;
	            } 
	            catch ( SQLException e ) 
	            {
	                e.printStackTrace();
	            }
	        }
	    }
}
